package com.example.d6_homework.homework02;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class Test {
    public static void main(String[] args) throws Exception {
        // 1.反射第一步获取字节码对象
        Class c = Person.class;
    
        // 2.获取类的有参数的构造器
        Constructor constructor = c.getDeclaredConstructor(String.class, Integer.class);
    
        // 3.通过构造器实例化对象
        Person p = (Person) constructor.newInstance("孙悟空", 1000);
        System.out.println(p);
    
        // 4.获取类的私有方法,并设置可访问
        Method method = c.getDeclaredMethod("setName", String.class);
        method.setAccessible(true);
        // 5.调用对象的私有方法
        method.invoke(p, "猪八戒");
    
        // 6.获取类的另一个私有方法,并设置可访问
        Method method1 = c.getDeclaredMethod("setAge", Integer.class);
        method1.setAccessible(true);
        // 7.调用对象的另一个私有方法
        method1.invoke(p, 999);
    
        System.out.println(p);
    }
}
